package ASAExpression;

import exceptions.ExecutionException;

/**
 * Classe representant l'opération modulo 
 * @author D.romain
 * @author O.riad
 */
public class ASAMod extends ASAExpr {

    private ASAExpr e1;
    private ASAExpr e2;

    /**
     * Constructeur prenant en paramètre
     * deux ASAExpr (2 opérandes)
     * @param e1 ASAExpr
     * @param e2 ASAExpr
     */
    public ASAMod(ASAExpr e1, ASAExpr e2) {
        this.e1 = e1;
        this.e2 = e2;
    }

    /**
     * Renvoie l'opérande gauche
     * @return ASAExp opérande gauche
     */
    @Override
    public ASAExpr getExpr1() {
        return e1;
    }

     /**
     * Renvoie l'opérande droit
     * @return ASAExp opérande droit
     */
    @Override
    public ASAExpr getExpr2() {
        return e2;
    }

    /**
     * Effectue l'opération : modulo
     * @return resultat du modulo des 2 expressions
     * @throws ExecutionException 
     */
    @Override
    public int evalue() throws ExecutionException {
        int retour = 1;
        try{
            return e1.evalue() % e2.evalue();
        } catch (ArithmeticException e) {
            throw new ExecutionException(1);
        }
    }

    
    /**
     * Renvoie sous forme de chaîne de caractères
     * le resultat du modulo
     * @return String resultat de la modulo
     * @throws ExecutionException 
     */
    @Override
    public String getLabelExplorateur() throws ExecutionException {
        return "MODULO " + this.evalue();
    }
}
